import { config } from '../config.js';

/**
 * 响应格式化工具类
 * 提供统一的API响应格式
 */
class ResponseFormatter {
    /**
     * 成功响应
     * @param {Object} res - Express响应对象
     * @param {*} data - 响应数据
     * @param {string} message - 响应消息
     * @param {number} statusCode - HTTP状态码
     */
    static success(res, data = null, message = 'Success', statusCode = 200) {
        const response = {
            success: true,
            message,
            data,
            timestamp: new Date().toISOString()
        };
        res.status(statusCode).json(response);
    }

    /**
     * 错误响应
     * @param {Object} res - Express响应对象
     * @param {string} message - 错误消息
     * @param {number} statusCode - HTTP状态码
     * @param {*} details - 错误详情（仅开发环境显示）
     */
    static error(res, message = 'Internal Server Error', statusCode = 500, details = null) {
        const response = {
            success: false,
            error: message,
            timestamp: new Date().toISOString()
        };
        
        if (details && config.env === 'development') {
            response.details = details;
        }
        
        res.status(statusCode).json(response);
    }

    /**
     * 404未找到响应
     * @param {Object} res - Express响应对象
     * @param {string} message - 错误消息
     */
    static notFound(res, message = 'Resource not found') {
        this.error(res, message, 404);
    }

    /**
     * 验证错误响应
     * @param {Object} res - Express响应对象
     * @param {Array|Object} errors - 验证错误信息
     * @param {string} message - 错误消息
     */
    static validationError(res, errors, message = 'Validation failed') {
        const response = {
            success: false,
            error: message,
            errors: errors,
            timestamp: new Date().toISOString()
        };
        res.status(400).json(response);
    }

    /**
     * 未授权响应
     * @param {Object} res - Express响应对象
     * @param {string} message - 错误消息
     */
    static unauthorized(res, message = 'Unauthorized') {
        this.error(res, message, 401);
    }

    /**
     * 禁止访问响应
     * @param {Object} res - Express响应对象
     * @param {string} message - 错误消息
     */
    static forbidden(res, message = 'Forbidden') {
        this.error(res, message, 403);
    }

    /**
     * 冲突响应
     * @param {Object} res - Express响应对象
     * @param {string} message - 错误消息
     */
    static conflict(res, message = 'Conflict') {
        this.error(res, message, 409);
    }
}

export default ResponseFormatter;